package com.eternal.base.database.dao;

import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;

import com.eternal.base.concat.NotificationName;
import com.eternal.base.database.entity.Notification;

import java.util.List;

/**
 * Created by Administrator
 * On 2020/5/9
 * Description:
 *
 * @author Administrator
 */
@Dao
public interface NotificationDao {
    /**
     * 插入事件
     *
     * @param notification n
     */
    @Insert
    void insertNotification(Notification notification);

    /**
     * 删除设备的事件
     *
     * @param mac 设备
     * @param id  事件
     */
    @Query("delete from notification where mac=:mac and port=:port and id=:id and type=:type")
    void deleteNotification(String mac, byte port, int id, byte type);

    /**
     * 删除设备的事件
     *
     * @param mac 设备
     * @param id  事件
     */
    @Query("delete from notification where mac=:mac and id=:id and type=:type")
    void deleteNotification(String mac, int id, byte type);

    /**
     * 加载设备所有事件
     *
     * @param mac 设备
     * @return 事件
     */
    @Query("select * from notification where mac=:mac and port=:port order by type asc")
    List<Notification> loadMacAll(String mac, byte port);

    /**
     * 加载设备所有事件
     *
     * @param mac 设备
     * @return 事件
     */
    @Query("select * from notification where mac=:mac order by type asc")
    List<Notification> loadMacAll(String mac);

    /**
     * 获取设备所有事件名
     *
     * @param mac 设备
     * @return 事件名
     */
    @Query("select id,name,type from notification where mac=:mac and port=:port")
    List<NotificationName> loadMacAllName(String mac, byte port);

    /**
     * 加载设备事件
     *
     * @param mac 设备mac
     * @param id  事件id
     * @return 事件
     */
    @Query("select * from notification where mac=:mac and port=:port and id=:id and type=:type")
    Notification loadByMacAndId(String mac, byte port, int id, byte type);

    /**
     * 更新事件
     *
     * @param notification 事件
     */
    @Update
    void update(Notification notification);

    /**
     * 修改开启状态
     *
     * @param mac  设备mac
     * @param id   事件id
     * @param open 开启状态
     */
    @Query("update notification set open=:open where mac=:mac and port=:port and id=:id and type=:type")
    void updateOpen(String mac, byte port, int id, byte type, boolean open);

    @Query("select name from notification where mac=:mac and port=:port and name=:name")
    String loadNameByMac(String mac, byte port, String name);
}
